package eu.jucy.gui.favhub;
import helpers.IObservable;
import helpers.Observable.IObserver;
import java.util.Arrays;
import logger.LoggerFactory;
import org.apache.log4j.Logger;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import eu.jucy.gui.ApplicationWorkbenchWindowAdvisor;
import eu.jucy.gui.GUIPI;
import eu.jucy.gui.UCEditor;
import eu.jucy.gui.favhub.FavHubColumns.Address;
import eu.jucy.gui.favhub.FavHubColumns.ChatOnly;
import eu.jucy.gui.favhub.FavHubColumns.Description;
import eu.jucy.gui.favhub.FavHubColumns.Email;
import eu.jucy.gui.favhub.FavHubColumns.FavHubName;
import eu.jucy.gui.favhub.FavHubColumns.Nick;
import eu.jucy.gui.favhub.FavHubColumns.Password;
import eu.jucy.gui.favhub.FavHubColumns.UserDescription;
import eu.jucy.gui.favhub.FavHubHandlers.ChangeFHPropertiesHandler;
import eu.jucy.gui.favhub.FavHubHandlers.CreateFavHubsHandler;
import eu.jucy.gui.favhub.FavHubHandlers.MoveDownHandler;
import eu.jucy.gui.favhub.FavHubHandlers.MoveUpHandler;
import eu.jucy.gui.favhub.FavHubHandlers.OpenHubHandler;
import eu.jucy.gui.favhub.FavHubHandlers.RemoveHandler;
import eu.jucy.gui.itemhandler.CommandDoubleClickListener;
import uc.FavHub;
import uc.IFavHubs;
import uihelpers.CommandButton;
import uihelpers.SUIJob;
import uihelpers.TableViewerAdministrator;
/**
* very ugly class..
*
* lots of code mingled with GUI code.. needs rewrite / refactoring
*
* also if no TableViewer is used..it should be easy and possible
* to use the native CheckBoxes in the table..
*
* @author Quicksilver
*
*/
public class FavHubEditor extends UCEditor implements IObserver<FavHub> {
public static final String ID = "eu.jucy.FavHub";
public static final String OPEN_FAVHUBS_COMMAND_ID = "eu.jucy.gui.favhub.FavHub";
private static final Logger logger = LoggerFactory.make();
private Table table;
private CheckboxTableViewer tableViewer;
private TableViewerAdministrator<FavHub> tva;
private IFavHubs favHubs = ApplicationWorkbenchWindowAdvisor.get().getFavHubs();
public IFavHubs getFavHubs() {
return favHubs;
}
public void createPartControl(Composite parent) {
parent.setLayout(new GridLayout());
table = new Table(parent,SWT.CHECK | SWT.SINGLE|SWT.FULL_SELECTION |SWT.HIDE_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.HIDE_SELECTION );
tableViewer = new CheckboxTableViewer( table );
tableViewer.addDoubleClickListener(new CommandDoubleClickListener( OpenHubHandler.COMMAND_ID));
table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
table.setHeaderVisible(true);
tva = new TableViewerAdministrator<FavHub>(tableViewer,
Arrays.asList(new FavHubName(tableViewer), new Description(),new Nick(),
new Password(),new Address(),new UserDescription(),
new Email(),new ChatOnly()),
GUIPI.favHubsTable,TableViewerAdministrator.NoSorting,false);
FavHubContentProvider fh = new FavHubContentProvider();
tableViewer.setContentProvider(fh);
tva.apply();
tableViewer.setComparator(new ViewerComparator() {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
Integer a = ((FavHub)e1).getOrder();
Integer b = ((FavHub)e2).getOrder();
return a.compareTo(b);
}
});
getSite().setSelectionProvider(tableViewer);
createContextPopup(tableViewer);
final Composite comp = new Composite(parent, SWT.NONE);
comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
comp.setLayout(new RowLayout());
final Composite composite = new Composite(comp, SWT.NONE);
composite.setLayoutData(new RowData());
FillLayout fillLayout = new FillLayout();
fillLayout.spacing = 5;
composite.setLayout(fillLayout);
for (String command:new String[]{
CreateFavHubsHandler.COMMAND_ID,ChangeFHPropertiesHandler.COMMAND_ID,
RemoveHandler.COMMAND_ID,MoveUpHandler.COMMAND_ID,
MoveDownHandler.COMMAND_ID,OpenHubHandler.COMMAND_ID}) {
Button button = new Button(composite, SWT.NONE);
CommandButton.setCommandToButton(command, button, getSite(),false);
}
tableViewer.setInput(favHubs);
favHubs.addObserver(this);
logger.debug("created FavHub editor");
setControlsForFontAndColour(tableViewer.getTable());
}
public String getTopic() {
return getPartName();
}
public void update(IObservable<FavHub> o, FavHub arg) {
new SUIJob() {
public void run() {
logger.debug("refreshing FavHubs");
tableViewer.refresh();
}
}.schedule();
}
public void setFocus() {
table.setFocus();
}
public void dispose(){
favHubs.deleteObserver(this);
favHubs.store();
super.dispose();
}
public static class FavHubContentProvider implements IStructuredContentProvider {
public void dispose() {}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {}
public Object[] getElements(Object inputElement) {
IFavHubs hubs = (IFavHubs)inputElement;
return hubs.getFavHubs().toArray();
}
}
}